#ifndef USER_MANAGER_H
#define USER_MANAGER_H
#include "Database.h"
#include <string>
#include <mutex>
#include <map>
// 权限枚举定义
enum class Permission {
    DEVICE_CONTROL,
    LOG_VIEW,
    USER_MANAGE,
    SYSTEM_CONFIG
};
// 会话信息结构体
struct Session {
    int userId;
    std::string role;
    std::string token;
    time_t expiration;  // 会话过期时间戳
};
class UserManager {
public:
    // 单例访问点
    static UserManager& getInstance() {
        static UserManager instance;
        return instance;
    }
    // 用户登录（返回会话令牌）
    Session login(const std::string& username, const std::string& password);
    // 注销用户
    void logout(const std::string& token);
    // 权限验证接口
    bool checkPermission(const std::string& token, 
                        Permission required, 
                        int targetDevice = -1);
    // 会话有效性检查
    bool validateSession(const std::string& token);
    // 禁止拷贝和赋值
    UserManager(const UserManager&) = delete;
    UserManager& operator=(const UserManager&) = delete;
private:
    UserManager() = default;  // 私有构造函数
    ~UserManager() = default;
    // 生成会话令牌（UUID + 时间戳哈希）
    std::string generateSessionToken() const;
    // 会话存储结构
    std::map<std::string, Session> activeSessions;
    
    // 数据库访问互斥锁
    std::mutex dbMutex;
    // 会话存储互斥锁
    std::mutex sessionMutex;
    // 会话过期时间（秒）
    static constexpr int SESSION_EXPIRATION = 3600;
};
// 自定义认证异常
class AuthException : public std::runtime_error {
public:
    explicit AuthException(const std::string& msg)
        : std::runtime_error("Authentication Error: " + msg) {}
};
#endif // USER_MANAGER_H